package com.qf.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qf.dao.MenuMapper;
import com.qf.dao.PermsettingMapper;
import com.qf.dao.UsermanagerMapper;
import com.qf.pojo.Menu;
import com.qf.pojo.Permsetting;
import com.qf.pojo.Usermanager;
import com.qf.service.UsermanagerService;
import com.qf.utils.enums.UserStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 2019/11/19 0019
 * Author->DT
 * qmxc
 * 行到水穷处 坐看云起时
 * 模块：用户管理Service层实现类
 */
@Service
public class UsermanagerServiceImpl implements UsermanagerService {
    @Autowired
    private UsermanagerMapper usermanagerMapper;

    @Autowired
    private PermsettingMapper roleMapper;

    @Autowired
    private MenuMapper menuMapper;
    //登录
//    @Override
//    public Usermanager login(String username, String password) {
//        //根据用户名得到用户信息
//        Usermanager usermanager = usermanagerMapper.login(username);
//        //校验
//        if (usermanager!=null){
//            //用户存在
//            if (usermanager.getPassword().equals(password)){
//                //验证密码匹配
//                //生成查询权限菜单
//                //1.根据用户角色id 查询出对应的用户角色信息
//                Permsetting role = roleMapper.selectByPrimaryKey(usermanager.getUserrole());
//                //2.根据角色查询出对应的菜单列表；
//                List<Menu> menuList= menuMapper.selectByPrimaryKey(role.getId());
//
//                //新建存取一级菜单的列表
//                ArrayList<Menu> firstList = new ArrayList<>();
//                //遍历查询出来的菜单列表
//                for (Menu menu : menuList) {
//                    //判断menu是否为一级菜单
//                    if (menu.getParentId()==0){
//                        //当前菜单为一级菜单
//                        //创建二级菜单列表
//                        ArrayList<Menu> secondList = new ArrayList<>();
//                        //第二次遍历菜单列表，用来查询出对应一级菜单的二级菜单；
//                        for (Menu menu2 : menuList) {
//                            //判断是否为当前一级菜单对应的二级菜单：
//                            if (menu.getMid()==menu2.getParentId()){
//                                //当前菜单为当前一级菜单对应的二级菜单
//                                //加入到secondList中
//                                secondList.add(menu2);
//                            }
//                        }
//                        //遍历查询当前菜单的二级菜单结束，将查询到的二级菜单赋值到到当前菜单中；
//                        menu.setSecondMenu(secondList);
//                        firstList.add(menu);
//                    }
//
//
//                }
                //全部遍历结束，菜单列表中的每个菜单的一级列表对应的二级列表均已设置
                //将结果设置到角色对象中
//                role.setMenuList(firstList);
//                //查询该角色的具体功能请求的权限列表：
//                List<Menu> permissionList=menuMapper.selectPermissionByRoleId(role.getId());
//                //将权限列表设置到角色对象中去
//                role.setPermissionList(permissionList);
//                //将该角色对象设置到用户对象中：
//                usermanager.setRole(role);
//                //返回用户对象
//                return usermanager;
//            }
//        }
//        return null;
//    }

    //根据条件分页查询
    @Override
    public PageInfo<Usermanager> findAllByLimitAndExample(Map map) {
        //1.开启分页
        PageHelper.startPage((int)map.get("index"), (int)map.get("page"));
        //2.查询学生列表
        List<Usermanager> userList= usermanagerMapper.findListOfUser(map);
        //3，封装PageInfo
        PageInfo<Usermanager> pageInfo = new PageInfo<>(userList);
        //4.返回
        return pageInfo;
    }

    //添加
    @Override
    public int insert(Usermanager record) {
        //封装参数
        record.setAddtime(new Date());
        record.setStatus(1);    //1为正常，0位注销(删除)
        int count = usermanagerMapper.insert(record);
        return count;
    }

    //根据userid查询用户数量
    @Override
    public Long findUserCountByUserId(Integer userid) {
        Long count=usermanagerMapper.findUserCountByUserId(userid);
        return count;
    }

    @Override
    public Usermanager selectByPrimaryKey(Integer id) {
        return usermanagerMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(Usermanager record) {
        return usermanagerMapper.updateByPrimaryKeySelective(record);
    }

    //逻辑删除：修改用户状态为删除状态
    @Override
    public int updateStateToDelete(Integer id) {
        Usermanager usermanager = new Usermanager();
        //设置用户id
        usermanager.setId(id);
        //设置用户状态为已删除
        usermanager.setStatus(UserStatus.HAS_DELETED.getCode());
        return usermanagerMapper.updateByPrimaryKeySelective(usermanager);
    }

    //批量逻辑删除
    @Override
    public int updateCheckedUsersStateToDelete(Integer[] ids) {
        return usermanagerMapper.updateCheckedUsersStateToDelete(ids);
    }


    //查询被选中id的用户信息
    @Override
    public List<Usermanager> findByIds(Integer[] uid) {
        return usermanagerMapper.findByIds(uid);
    }

    //根据用户角色id查询用户信息
    @Override
    public List<Usermanager> findByRoleId(Integer rid) {
        return usermanagerMapper.findByRoleId(rid);
    }

    //批量删除用户角色信息
    @Override
    public int updateCheckedUesd(Integer[] rid) {
        //修改rids对应的所有用户的used为0,即禁用状态
        int count=roleMapper.updateCheckedUesd(rid);
        return count;
    }


}
